package com.iwhalecloud.citybrain.flow.platform.manager.domain.repository;

import java.util.List;

import com.iwhalecloud.citybrain.flow.platform.manager.common.FouraUser;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.FlowUser;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.User;

/**
 * @author lilh
 * @date 2019-01-22 15:29
 */
public interface UserRepository {

    /**
     * 获取当前的登录用户，在系统中不存在时创建
     *
     * @return 当前登录用户
     */
    User getCurrentUser();

    /**
     * 通过4A用户id获取指定用户
     *
     * @param id
     * @return
     */
    User getUserById(String id);

    /**
     * 通过4A用户code获取指定用户
     *
     * @param userCode
     * @return
     */
    User getUserByCode(String userCode);

    /**
     * 根据组织id获取组织名称
     * @param orgCode
     * @return
     */
    String getOrgNameByCode(String orgCode);

    /**
     * 通过4A用户code获取指定用户, 包括用户所在组织信息
     *
     * @param userCode
     * @return
     */
    User getUserWithOrgByCode(String userCode);

    /**
     * 通过4A用户code获取指定用户, 包括用户所在组织信息
     * 直接通过"用户中心"拿数据，不经过流程平台的数据库
     * @param userCode
     * @return
     */
    User getUserWithOrgByCodeFromUserCenter(String userCode);

    /**
     * 通过用户名获取用户
     *
     * @param name
     * @return
     */
    User getUserByName(String name);
    /**
     * 通过用户名获取用户(从用户中心)
     *
     * @param name
     * @return
     */
    List<User> getUserByNameFromUserCenter(String name);

    /**
     * 添加流程平台用户
     *
     * @param userInfo
     * @return
     */
    Integer insertFlowUser(FlowUser userInfo);

    /**
     * 获取应用已授权用户
     *
     * @param appId
     * @return
     */
    List<FlowUser> listAppAuthorizedUser(Integer appId);

    /**
     * 将4A用户添加到流程平台
     *
     * @param fouraUser
     * @return
     */
    FlowUser insertFouraUser(FouraUser fouraUser);

    /**
     * 更新流程平台用户
     *
     * @param userInfo
     * @return
     */
    Integer updateFlowUser(FlowUser userInfo);

    /**
     * 根据角色获取用户列表
     *
     * @param roleId 角色id
     * @return 用户列表
     */
    List<User> listUserByRoleId(String roleId);


    /**
     * 根据组织code查询用户列表
     *
     * @param orgCode 组织code
     * @return 用户列表
     */
    List<User> listUserByOrgCode(String orgCode);

    /**
     * 根据userCode 查询用户信息
     *
     * @param userCodes userCode
     * @return 用户信息
     */
    List<User> listUserByUserCodes(List<String> userCodes);

    /**
     * 根据岗位id查询用户信息
     * @param positionId
     * @return
     */
    List<User> getUserListByPositionId(String positionId);

    /**
     * 根据岗位id获取岗位名称
     * @param positionId
     * @return
     */
    String getPositionDetailById(String positionId);

    /**
     * 根据角色id获取角色名称
     * @param roleId
     * @return
     */
    String getRoleNameById(String roleId);

    /**
     * 根据组织id获取组织名称
     * @param orgId
     * @return
     */
    String getOrgNameById(String orgId);

}
